// Copyright 2016 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef UI_ARC_NOTIFICATION_ARC_NOTIFICATION_MANAGER_H_
#define UI_ARC_NOTIFICATION_ARC_NOTIFICATION_MANAGER_H_

#include <map>
#include <string>

#include "base/containers/scoped_ptr_hash_map.h"
#include "components/arc/arc_bridge_service.h"
#include "components/arc/arc_service.h"
#include "components/arc/common/notifications.mojom.h"
#include "components/signin/core/account_id/account_id.h"
#include "mojo/public/cpp/bindings/binding.h"

namespace arc {

class ArcNotificationItem;

class ArcNotificationManager : public ArcService,
                               public ArcBridgeService::Observer,
                               public NotificationsHost {
public:
    ArcNotificationManager(ArcBridgeService* bridge_service,
        const AccountId& main_profile_id);
    ~ArcNotificationManager() override;

    // ArcBridgeService::Observer implementation:
    void OnNotificationsInstanceReady() override;
    void OnNotificationsInstanceClosed() override;

    // NotificationsHost implementation:
    void OnNotificationPosted(ArcNotificationDataPtr data) override;
    void OnNotificationRemoved(const mojo::String& key) override;

    // Methods called from ArcNotificationItem:
    void SendNotificationRemovedFromChrome(const std::string& key);
    void SendNotificationClickedOnChrome(const std::string& key);
    void SendNotificationButtonClickedOnChrome(
        const std::string& key, int button_index);

private:
    const AccountId main_profile_id_;

    using ItemMap = base::ScopedPtrHashMap<std::string, scoped_ptr<ArcNotificationItem>>;
    ItemMap items_;

    mojo::Binding<arc::NotificationsHost> binding_;

    DISALLOW_COPY_AND_ASSIGN(ArcNotificationManager);
};

} // namespace arc

#endif // UI_ARC_NOTIFICATION_ARC_NOTIFICATION_MANAGER_H_
